// 请求文件


// 默认参数
const apiUrl="http://127.0.0.1:7001/api/v1/";
const defaultOptions = {
	dataType: 'json',
	data: {},
	token: false,
	header: {
		'Content-Type': 'application/json;charset=UTF-8',
	},
}

// 参数处理
async function getOptions(options) {
	options=Object.assign(defaultOptions,options);
	options.url=apiUrl+options.url;
	// console.log('op:', options);
	// // 组织参数
	// options.url = defaultOptions.url + options.url
	// options.header = Object.assign(defaultOptions.header, options.header)
	// options.dataType = options.dataType || defaultOptions.dataType
	// options.token = options.token || defaultOptions.token
	return options
}


// 请求，返回promise
async function wxRequest(options,method) {
	// 进行请求
	//整合参数w
	let option = await getOptions(options)
	return new Promise((resolve, reject) => {
		// 请求之前进行验证
		// token 验证
		if (option.token) {
			let token = uni.getStorageSync('token')
			// 二次验证
			option.header.token = token
		}
		// console.log('token:'option.header);
		// 请求中
		wx.request({
			url: option.url,
			data: option.data,
			dataType: option.dataType,
			method,
			header:option.header,
			success: (res) => {
				// 请求成功
				console.log('res:', res)
				// 错误处理
				if( res.statusCode != 200){
					wx.showModal({
						showCancel:false,
						title:"提示",
						content: res.data.data,
						confirmText:'好的'
					})
					return 
				}
				// 请求成功
				let resData = res.data.data
				resolve(resData)
			},
			// 请求失败
			fail: (err) => {
				// console.log('err:',err);
				// 失败哦弹窗
				wx.showModal({
					showCancel: false,
					confirmText: '好的',
					title: '温馨提示',
					content: err.errMsg || "请求失败，请稍后重试",
					success: (res) => {
						if (res.confirm) {
							reject(err)
						}
					}
				})
			}
		})
	})
}




const request = {
	// get请求
	get(options){
		return wxRequest(options,'GET')
	},
	// post请求
	post(options){
		return wxRequest(options,'POST')
	},
	
	// 文件上传
	upload(data){
		// console.log(13233);
		return new Promise((resolve,reject)=>{
			// token验证
			let token = ''
			if(data.token){
				token = uni.getStorageSync('token')
				if(!token){
					uni.showToast({
						title:"请先登录",
						icon:"none"
					})
					return uni.reLaunch({
						url:'/pages/login/login.vue'
					})
				}
			}
			
			
			// 开启上传
			// console.log(123);
			// console.log('updata:',data);
			const uploadTask = uni.uploadFile({
				url: apiUrl + data.url,
				filePath: data.filePath,
				name: data.name || 'files',
				header: data.token ?  { token } : {},
				formData: data.formData || {},
				success: (res)=>{
					console.log('成功');
					console.log('res',res);
					if(res.statusCode !== 200){
						resolve(false)
						return uni.showToast({
							title:'上传失败',
							icon:'none'
						})
					}
					let message = JSON.parse(res.data)
					resolve(message.data)
				}
			})
			
			// 监听进度
			uploadTask.onProgressUpdate(res=>{
				if(typeof data.callback == 'function'){
					data.callback(res.progress)
				}
			})
		})	
		
	}
	
}

export default request
